<?php

/* * ************************************************************************* 
 * extention.func.php
 * Encoding : UTF-8
 * Desc. :用户自定义函数库
 * Created on : 2013-4-23 10:45:07 by Aiden , aiden.ke@doosnet.net
 * Updated on : 2013-4-23 10:45:07 by Aiden , aiden.ke@doosnet.net
 * ************************************************************************* */

/**
 * 获取远程HTML
 * @param string $url    获取地址
 * @param array $config  配置
 */
function get_html_contents($url) {
    if (!empty($url) && $html = @file_get_contents($url)) {
        return $html;
    } else {
        return false;
    }
}

/**
 * 获取HTML源码
 * @param url $string URL路径
 * @param postData $string  特定的POST数据[URL形式]
 * @param cookie $string 特定的COOKIE
 * @param referer_url $string 来源/引用URL
 * @param proxy $string 代理IP
 * @param httpHeader $aray 设置CURLOPT_HTTPHEADER信息 array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8')
 */
function get_web($url='', $postData='', $cookie='', $referer_url='', $proxy='', $httpHeader='') {
    if (!isset($url) || (!strstr($url, 'http://') and !strstr($url, 'https://') )) {
        echo "URL Empty or [http://] or [https://] Not Exist!!! Error (1)\n";
        exit;
    }
    $ch = curl_init(); //初始化curl
    curl_setopt($ch, CURLOPT_URL, $url); //设置请求链接
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 将curl_exec()获取的信息以文件流的形式返回，而不是直接输出
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //使用自动跳转
    curl_setopt($ch, CURLOPT_MAXREDIRS, 7); //指定最多的HTTP重定向的数量，这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。
    curl_setopt($ch, CURLOPT_HEADER, 0); // 如果你想把一个头包含在输出中，设置这个选项为一个非零值
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"); //模拟用户使用的浏览器
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //在发起连接前等待的时间，如果设置为0，则无限等待
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时限制防止死循环

    $parseUrl = parse_url($url); //解析URL

    if (empty($httpHeader) || !is_array($httpHeader)) {
        if (!isset($parseUrl['port']) || $parseUrl['port'] == "80" || empty($parseUrl['port'])) {
            $host_str = $parseUrl['host'];
        } else {
            $host_str = $parseUrl['host'] . ":" . $parseUrl['port'];
        }
        $httpHeader[] = "Host: " . $host_str;
        $httpHeader[] = "Cache-Control: no-cache";
        $httpHeader[] = "Connection: Keep-Alive";
    }
    curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader); //设置一个header中传输内容的数组

    if ($proxy) {//设置代理
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }

    if (!$referer_url) {//自动获取来源URL
        $referer_url = "http://" . $parseUrl['host'];
    }
    curl_setopt($ch, CURLOPT_REFERER, $referer_url);

    if ($cookie) {//设置Cookie
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    }

    if ($postData) {//设置Post数据
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    }

    $buffer = curl_exec($ch); //执行一个curl会话
    $header = curl_getinfo($ch); //获取一个curl连接资源句柄的信息
    // 检查是否有错误发生
    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
    }
    curl_close($ch); // 关闭句柄

    unset($url, $parseUrl, $httpHeader, $host_str, $proxy, $referer_url, $cookie, $postData, $ch);
    return array("buffer" => $buffer, "header" => $header);
}

/**
 * 检查远程文件是否存在
 * @param url $string URL路径
 * @return bool
 */
function remote_file_exists($url) {
    $curl = curl_init($url); // 不取回数据
    curl_setopt($curl, CURLOPT_NOBODY, true);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求
    $result = curl_exec($curl);
    $found = false;
    if ($result !== false) {
        /** 再检查http响应码是否为200 */
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        if ($statusCode == 200) {
            $found = true;
        }
    }
    curl_close($curl);
    return $found;
}

/**
 * 抓取列表函数
 * @param pstr $string 定位起始位置
 * @param nstr $string 定位结束标签位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return array 返回数组
 */
function pet_strlist($pstr, $nstr, $objHTML, $tag='none') {
    $resultDoc = array();
    $pstrlen = strlen($pstr);

    $cntDoc = 0;
    while (strstr($objHTML, $pstr)) {
        $str = strstr($objHTML, $pstr);
        $str = substr($str, $pstrlen);
        $objHTML = $str;
        if ($tag == 'none')
            $resultDoc[$cntDoc] = trim(strip_tags(substr($str, 0, strpos($str, $nstr))));
        else
            $resultDoc[$cntDoc] = trim(substr($str, 0, strpos($str, $nstr)));
        $cntDoc++;
    }

    return $resultDoc;
}

/**
 * 抓取列表函数
 * @param pstr $string 定位起始位置
 * @param nstr $string 定位最后一个结束位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return array 返回数组
 */
function pet_nstrlist($pstr, $nstr, $objHTML, $tag='none') {
    $resultDoc = array();
    $pstrlen = strlen($pstr);

    $cntDoc = 0;
    while (strstr($objHTML, $pstr)) {
        $str = strstr($objHTML, $pstr);
        $str = substr($str, $pstrlen);
        $objHTML = $str;
        if ($tag == 'none')
            $resultDoc[$cntDoc] = trim(strip_tags(substr($str, 0, strrpos($str, $nstr))));
        else
            $resultDoc[$cntDoc] = trim(substr($str, 0, strrpos($str, $nstr)));
        $cntDoc++;
    }

    return $resultDoc;
}

/**
 * 抓取列表函数
 * @param pstr $string 定位起始位置
 * @param mstr $string 再次精确定位起始位置
 * @param nstr $string 定位结束标签位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return array 返回数组
 */
function pet_mstrlist($pstr, $mstr, $nstr, $objHTML, $tag='none') {
    $resultDoc = array();
    $mstrlen = strlen($mstr);

    $cntDoc = 0;
    while (strstr($objHTML, $pstr)) {
        $str = strstr($objHTML, $pstr);
        $str = strstr($str, $mstr);
        $str = substr($str, $mstrlen);
        $objHTML = $str;
        if ($tag == 'none') {
            $resultDoc[$cntDoc] = trim(strip_tags(substr($str, 0, strpos($str, $nstr))));
            $cntDoc++;
        } else {
            $resultDoc[$cntDoc] = trim(substr($str, 0, strpos($str, $nstr)));
            $cntDoc++;
        }
    }

    return $resultDoc;
}

/**
 * 截取字符串值
 * @param pstr $string 定位起始位置
 * @param nstr $string 定位结束位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return string 返回字符串
 */
function pet_str($pstr, $nstr, $objHTML, $tag='none') {
    $pstrlen = strlen($pstr);
    $str = strstr($objHTML, $pstr);
    $str = substr($str, $pstrlen);
    if ($tag === 'none')
        $str = trim(strip_tags(substr($str, 0, strpos($str, $nstr))));
    else
        $str = trim((substr($str, 0, strpos($str, $nstr))));

    return $str;
}

/**
 * 
 * HTML切取
 * @param string $html    要进入切取的HTML代码
 * @param string $start   开始
 * @param string $center   过渡
 * @param string $end     结束
 */
function cut_html($html, $start, $center, $end) {
    if (empty($html))
        return false;
    $html = str_replace(array("\r", "\n"), "", $html);
    $start = str_replace(array("\r", "\n"), "", $start);
    $center = str_replace(array("\r", "\n"), "", $center);
    $end = str_replace(array("\r", "\n"), "", $end);
    $html = explode(trim($start), $html);
    if (is_array($html))
        $html = explode(trim($center), $html[1]);
    if (is_array($html))
        $html = explode(trim($end), $html[1]);

    return $html[0];
}

/**
 * 抓取列表函数
 * @param pstr $string 定位起始位置
 * @param mstr $string 再次精确定位起始位置
 * @param nstr $string 定位结束标签位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return array 返回数组
 */
function pet_mstr($pstr, $mstr, $nstr, $objHTML, $tag='none') {
    $pstrlen = strlen($mstr);
    $str = strstr($objHTML, $pstr);
    $str = substr($str, strlen($pstr));
    $str = strstr($str, $mstr);
    $str = substr($str, $pstrlen);
    if ($tag === 'none')
        $str = trim(strip_tags(substr($str, 0, strpos($str, $nstr))));
    else
        $str = trim((substr($str, 0, strpos($str, $nstr))));

    return $str;
}

/**
 * 截取字符串值
 * @param pstr $string 定位起始位置
 * @param mstr $string 定位最后一个起始位置
 * @param nstr $string 定位结束位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return string 返回字符串
 */
function pet_qstr($pstr, $mstr, $nstr, $objHTML, $tag='none') {
    $str = substr(strstr($objHTML, $pstr), strlen($pstr));
    $str = substr($str, 0, strpos($str, $nstr));
    $start = strrpos($str, $mstr) + strlen($mstr);
    if ($tag === 'none')
        $str = trim(strip_tags(substr($str, $start)));
    else
        $str = trim((substr($str, $start)));
    return $str;
}

/**
 * 截取字符串值
 * @param pstr $string 定位起始位置
 * @param mstr $string 定位最后一个起始位置
 * @param nstr $string 定位最后一个结束位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return string 返回字符串
 */
function pet_qlstr($pstr, $mstr, $nstr, $objHTML, $tag='none') {
    $str = substr(strstr($objHTML, $pstr), strlen($pstr));
    $str = substr($str, 0, strrpos($str, $nstr));
    $start = strrpos($str, $mstr) + strlen($mstr);
    if ($tag === 'none')
        $str = trim(strip_tags(substr($str, $start)));
    else
        $str = trim((substr($str, $start)));
    return $str;
}

/**
 * 截取字符串值
 * @param pstr $string 定位起始位置
 * @param mstr $string 再次精确定位起始位置
 * @param nstr $string 定位最后一个结束位置
 * @param objHTML $string 需要查找字符串源
 * @param tag  $string 是否去Html标签 默认为none去标签
 * @return string 返回字符串
 */
function pet_nstr($pstr, $mstr, $nstr, $objHTML, $tag='none') {
    $str = substr(strstr($objHTML, $pstr), strlen($pstr));
    $str = substr(strstr($str, $mstr), strlen($mstr));
    if ($tag === 'none')
        $str = trim(strip_tags(substr($str, 0, strrpos($str, $nstr))));
    else
        $str = trim((substr($str, 0, strrpos($str, $nstr))));

    return $str;
}

/**
 * 初始化价格
 * @param string $price
 * @return int 价格
 */
function initprice($price) {
    $price = str_replace(array(',', '￥'), '', $price);
    if (is_numeric($price) && $price > 0) {
        return $price;
    } else {
        return;
    }
}
?>